package com.library.controller;

import com.library.pojo.dto.user.UserChangePasswordDTO;
import com.library.pojo.dto.user.UserLoginDTO;
import com.library.pojo.dto.user.UserRegisterDTO;
import com.library.pojo.entity.LibraryUsers;
import com.library.pojo.vo.UserVO;
import com.library.result.Result;
import com.library.service.UserService;
import com.library.service.impl.UserServiceImpl;

/**
 * 用户对个人信息的操作
 * 只写对外的方法
 */
public class UserController {
    UserService userService = new UserServiceImpl();

    /**
     * 查询个人信息
     *
     * @param userId 用户ID（必填）
     * @return Result<UserVO>：用户信息（ID/用户名/角色等）
     */
    public Result<UserVO> selectUserInfo(Integer userId) {
        try{
            UserVO userVO = userService.selectUserInfo(userId);
            if (userVO == null) {
                return Result.error("用户不存在");
            }
            return Result.success(userVO);
        } catch (Exception e) {
            return Result.error("查询失败: " + e.getMessage());
        }


    }

    /**
     * 用户登录
     *
     * @param userLoginDTO 登录参数（必填：username/password）
     * @return Result<String>：成功/失败提示
     */
    public Result<LibraryUsers> login(UserLoginDTO userLoginDTO){
        try {
            LibraryUsers userInfo = userService.login(userLoginDTO);
            if (userInfo == null) {
                return Result.error(null);
            }
            return Result.success(userInfo);
        } catch (Exception e) {
            return Result.error("登录失败: " + e.getMessage());
        }
    }


    /**
     * 新增用户
     *
     * @param userRegisterDTO 注册参数（必填：username/password）
     * @return Result<String>：成功/失败提示
     */
    public Result<String> register(UserRegisterDTO userRegisterDTO) {
        try {
            int register = userService.register(userRegisterDTO);
            if (register == 0) {
                return Result.error("注册失败");
            }
            return Result.success("注册成功");
        }catch (Exception e) {
            return Result.error("注册失败: " + e.getMessage());
        }
    }


    /**
     * 修改登录用户密码
     *
     * @param userChangePasswordDTO 改密参数（必填：userId/oldPassword/newPassword）
     * @return Result<String>：成功/失败提示
     */
    public Result<String> changePassword(UserChangePasswordDTO userChangePasswordDTO) {
        try {
            int flag = userService.changePassword(userChangePasswordDTO);
            if (flag == 0) {
                return Result.error("密码修改失败");
            }
            return Result.success("密码修改成功");
        } catch (Exception e) {
            return Result.error("密码修改失败: " + e.getMessage());
        }
    }

}
